Welcome to pandas!

6.8 选择指定级别数据

对指定索引层级选择,可以使用df.xs()函数,该函数使用一个关键参数来选择分层索引特定级别的数据,结构如下:

df.xs(key,axis=0,level=None,drop_level=True)

key :指定索引标签,可以指定单级标签,也可以指定多组级标签,多级标签需要放置在元组

axis :0或index表示对行索引的操作,1或columns表示对列索引的操作,默认值为0。

Level :对指定层级做索引选择,默认为n层,级别可以通过标签或数字引用。

drop_level :是否删除选择层级的数据,默认为True.


import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.多层索引区域选择.xlsx" , header =[ 0,1,2 ], index_col =[ 0,1,2 ])

df.sort_index(level=[ 0,1,2 ], inplace = True )

df1=df.xs( "销售1部" , level = "部门" , drop_level = False )

# df=df.xs("销售1部",level=1,drop_level=False) #结果同上

# df2=df.xs("配件",level="中类",drop_level=False,axis=1) #结果同下

df2=df.xs( "配件" , level = 1 , drop_level = False , axis = 1 )

print (df1)

print ("------------------------------------")

print (df2)


大类 硬件 软件
中类 整机 配件 办公 编程
小类 PC 笔记本 CPU 主板 显卡 Excel Word Python
地区 部门 代号
上海 销售1部 A 2 7 3 2 9 66 9 55
B 12 5 45 15 12 24 13 41
北京 销售1部 A 99 55 22 18 31 66 56 78
B 23 34 13 42 45 99 67 60
成都 销售1部 A 24 96 11 99 78 56 18 12
------------------------------------

大类 硬件
中类 配件
小类 CPU 主板 显卡
地区 部门 代号
上海 销售1部 A 3 2 9
B 45 15 12
销售2部 C 12 64 65
北京 销售1部 A 22 18 31
B 13 42 45
销售2部 C 35 66 21
D 45 12 45
成都 销售1部 A 11 99 78
销售2部 B 58 11 44

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.多层索引区域选择.xlsx" , header =[ 0,1,2 ], index_col =[ 0,1,2 ])

df.sort_index(level=[ 0,1,2 ], inplace = True )

df=df.xs(( "销售1部","北京" ), level =( "部门","地区" ), drop_level = False )

print (df)

返回:

大类 硬件 软件
中类 整机 配件 办公 编程
小类 PC 笔记本 CPU 主板 显卡 Excel Word Python
地区 部门 代号
北京 销售1部 A 99 55 22 18 31 66 56 78
B 23 34 13 42 45 99 67 60